Status deste relatório: working in progress

Início

Metadados do artigo aceito para publicação na RSP, de autoria de Rony Coelho, Felipe Guth e Miguel Loureiro

  • Neste relatório são disponibilizados os códigos e as bases de dados utilizados no artigo

    • Para verificar os códigos, clique em Code

    • Os chuncks dos códigos estão comentados com informações antecedidas por #

    • Uma versão deste relatorio em formato de script (arquivo .Rmd) pode ser encontrada no github dos autores

    • Os dados brutos podem acessados em suas fontes originais nos respectivos links fornecidos oportunamente


00. Configurações prévias

  • Carregar pacotes

  • Definir funções

# limpar enviroment
rm(list = ls())

# Desabilitar notação científica
#options(scipen = 999)

# Instalar este pacote para quem não o tem
#install.packages("pacman")

pacman::p_load(tidyverse, readxl, janitor, sjPlot, 
               scales, DataExplorer, DT, gridExtra,
               viridis, ggcorrplot, VGAM, geobr, ggthemes)

Função para carregar as Munics

# A funcao carrega dois objetos: 
# 1 - O dicionário da Munic, contido na primeira aba do excel; 
# 2 - Os dados das Munics contidos em todas as demais abas, unidos por "A1"

carregar_munics <- function(link_da_munic, ano){
  # definir diretório e arquivo temporário
  wd_origin <- getwd()
  temp_dir <- tempdir()
  setwd(temp_dir)
  file.remove(list.files(path = temp_dir))
  temp_file <- tempfile(tmpdir = temp_dir)
  # Criar lista para armazenar arquivos 
  Munic_list <- list()
  # Download da Munic
  download.file(url = link_da_munic, destfile = temp_file)
  # unizip
  unzip(temp_file)
  # remover temporário
  file.remove(temp_file)
  # selecionar o arquivo xls
  file.xls <- list.files(pattern = "xls")
  # Nome da Munic
  Munic <- paste0("Munic_", ano)
  # Carregar todas as abas do excel  
  Munic <- file.xls %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map(read_excel, path = file.xls)
  # remover arquivo xls da pasta temporaria
  file.remove(file.xls)
  # Nome do dicionario
  dic <- paste0("dic_", ano)
  # selecionar dicionário
  dic <- Munic[[1]]
  # excluir dicionário
  Munic[[1]] <- NULL
  # Mesclar todas as abas do excel
  Munic <- Munic %>% 
      reduce(full_join, by = "A1")
  # Criar nome da lista 
  list <- paste0("list_", Munic)
  # criar lista com dicionário e Munic
  list <- list(dic, Munic)
  # retornar ao diretório orginal
  setwd(wd_origin)
  # retornar objeto list com dicionário e Munics
  return(list)
}

01. Carregar dados

Munic 2014
  • dados da saúde
  • educação
  • total de servidores do município (com graduação e pós-graduação)
Munic 2013 - Bloco Suplementar
  • dados da assistencia social
Munic 2015
  • dados dos consórcios nas três áreas (saúde, educ. e assist. social)
Pib
  • ano: 2014
IDH-M
  • ano: 2010
########################################
# Munic 2014
Munic_14_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2014/base_MUNIC_xls_2014.zip"

Munic_14 <- carregar_munics(link_da_munic = Munic_14_link,
                            ano = 2014)

Munic_dic_14 <- Munic_14[[1]]

Munic_14 <- Munic_14[[2]]

########################################
# Munic 2013 - Suplementar
Munic_13sup_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/Assistencia_Social_2013/xls/base_assist_social_2013.zip"

Munic_13 <- carregar_munics(link_da_munic = Munic_13sup_link,
                            ano = 2013)

Munic_dic_13 <- Munic_13[[1]]

Munic_13 <- Munic_13[[2]]

########################################
# Munic 2015
Munic_15_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2015/Base_de_Dados/Base_MUNIC_2015_xls.zip"

Munic_15 <- carregar_munics(link_da_munic = Munic_15_link,
                            ano = 2015)

Munic_dic_15 <- Munic_15[[1]]

Munic_15 <- Munic_15[[2]]

########################################
# Pib   
pib_link <- "ftp://ftp.ibge.gov.br/Pib_Municipios/2017/base/base_de_dados_2010_2017_xls.zip"
temp_dir <- tempdir()
#
temp_file2 <- tempfile(tmpdir = temp_dir)
# download
download.file(url = pib_link, destfile = temp_file2)
#unzip
unzip(temp_file2)
# selecionar arquivo
file.xls <- list.files(pattern = "xls")

pib <- rio::import(file.xls)
file.remove(file.xls)
## [1] TRUE
########################################    
# Carregar dados do idh-m
idhm_link <- "http://atlasbrasil.org.br/2013/data/rawData/atlas2013_dadosbrutos_pt.xlsx"

idhm <- rio::import(idhm_link, sheet = 2)
#idhm <- read_excel("idh_census.xlsx", sheet = 2)   

########################################    
# base de códigos IBGE
#cod <- read_excel("codigos.xlsx") %>% 
#      dplyr::select(1:2)
Not run
# Uso particular para configurações no computador pessoal 
#setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data.RData")
#load("capacities_raw_data.RData")

Selecionar dados

###########################################
# Munic 2014 - saúde e educação
index_14 <- c("A263", # Conselho de Saúde
              "A271", # Fundo de Saúde
              "A273", # Plano de Saúde
              "A251", # Secretaria de Saúde
              "A256", # Servidores da Saúde
              "A207", # Conselho de Educação
              "A224", # Conselho do Fundeb, proxy para o fundo
              "A203", # Plano de Educação
              "A157", # Secretaria de Educação
              "A167", # Servidores da Educação
              #"A392", # Secretaria Direitos Humanos
              #"A545", # Fundo Direitos Humanos
              #"A410", # Plano Direitos Humanos
              #"A442",  # Conselho Direitos Humanos
              "A2",   # Total de servidores do Municipio 
              "A12", # Total com ensino Superior
              "A13") # Total com pós-graduação

Munic_14_sel <- Munic_14 %>% 
  dplyr::select(A1, 
                A1022:A1029, # região, população e porte
                index_14)
###########################################    
#Munic 2013 - Assistência Social
    index_13 <- c("A1", 
                  "A199", # Conselho da Assit. Social
                  "A230", # Fundo da Assist. Social
                  "A149", # Plano da Assist. Social
                  "A2", # Secretaria de Assist. Social
                  "A39") # Servidores da Assist. Social
    
    Munic_13_sel <- Munic_13 %>% 
      dplyr::select(index_13) 
###########################################    
# Munic 2015 - consórcios
    index_15 <- c("A1", 
                  "A151", # Consórcio de Educação
                  "A152", # Intermunicipal
                  "A153", # Estadual
                  "A154", # Federal
                  "A155", # Consórcio de Saúde
                  "A156", # Intermunicipal
                  "A157", # Estadual
                  "A158", # Federal
                  "A159", # Consórcio de Assist. Social
                  "A160", # Intermunicipal
                  "A161", # Estadual
                  "A162") # Federal

    Munic_15_sel <- Munic_15 %>% 
      dplyr::select(index_15)

###########################################        
# PIB - 2014
    pib <- clean_names(pib)
    pib_sel <- pib %>% #glimpse()
      filter(ano == 2014) %>% 
      select(A1 = codigo_do_municipio, ano, 
             pib_total = produto_interno_bruto_a_precos_correntes_r_1_000,
             pib_per_cap = produto_interno_bruto_per_capita_a_precos_correntes_r_1_00)%>%
      arrange(desc(pib_per_cap))
    
###########################################                
# IDH-M - 2010
    idhm_sel <- idhm %>% 
      dplyr::select(A1 = Codmun7, ANO, IDHM) %>% 
      filter(ANO==2010) %>% 
      arrange(desc(IDHM))

Mesclar bases

# garantir que os códigos possuem a mesma classficação
Munic_13_sel$A1 <- as.character(Munic_13_sel$A1)
Munic_15_sel$A1 <- as.character(Munic_15_sel$A1)
Munic_14_sel$A1 <- as.character(Munic_14_sel$A1)
pib_sel$A1 <- as.character(pib_sel$A1)
idhm_sel$A1 <- as.character(idhm_sel$A1)

# Criar variavel com código de 6 digitos para mesclar com a Munic 2013 e mesclar todas as Munics
capacities <- Munic_14_sel %>% 
  mutate(A1a = str_sub(A1,start = 1, end = 6)) %>% 
  select(A1, A1a, everything()) %>% 
  full_join(Munic_13_sel, by = c("A1a"="A1")) %>% 
  full_join(Munic_15_sel, by = c("A1"="A1"))

# Mesclar pib e idhm
capacities <- capacities %>% 
  full_join(pib_sel) %>% 
  full_join(idhm_sel)

Visualização parcial do banco

  • Apenas 10 primeiras linhas
  • Nomes das variáveis originais
capacities %>% head(10)

Organizar e renomenar variáveis

capacities <- capacities %>% 
  select(cod_mun = A1,
         nm_mun = A1027,
         populacao = A1028,
         faixa_pop = A1029,
         cod_est = A1022,
         nm_est = A1025,
         sg_est = A1026,
         regiao = A1024,
         # Secretarias
         sc_sa = A251,  
         sc_as = A2.y,  
         sc_ed = A157.x,
         # Planos
         pl_sa = A273,  
         pl_as = A149,  
         pl_ed = A203,  
         # Fundos
         fu_sa = A271,  
         fu_as = A230,  
         fu_ed = A224,  
         # Conselhos
         chl_sa = A263, 
         chl_as = A199, 
         chl_ed = A207, 
         # Servidores
         ser_sa = A256, 
         ser_as = A39,  
         ser_ed = A167,
         # Consórciso
         consor_ed = A151,
         #consor_ed_mun = A152 ,
         #consor_ed_est = A153,
         #consor_ed_un =  A154,
          consor_sa = A155,
         #consor_sa_mun = A156,
         #consor_sa_est = A157.y,
         #consor_sa_un =  A158,
          consor_as = A159,
         #consor_as_mun = A160,
         #consor_as_est = A161,
         #consor_as_un =  A162,
         pib_total = pib_total,
         pib_per_cap = pib_per_cap, 
         ano_pib = ano,
         idhm = IDHM,
         ano_idhm = ANO)

Verificar e remover NAs

  • NA - Not Available (dados não disponíveis)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities)

# NA - presentes apenas nos IDHM
# Excluir NA's
# Removidos 5 municipios não criados até 2010, portante sem o IDHM para esse ano.
capacities <- capacities %>% 
  drop_na(idhm)

DataExplorer::plot_missing(capacities)

Nova base 1

Criada apenas para preservar os dados brutos em caso de reutilização

capacities_1 <- capacities

02. Visualizar dados brutos

Podem ser baixados em formato excel ou csv

  • Legenda:

    • cod_mun = código do município
    • nm_mun = nome do município
    • cod_est = código do estado
    • nm_est = nome do estado
    • sg_est = sigla do estado
    • populacao = população do município
    • faixa_pop = classificação da faixa populacional (IBGE)
    • sc_ = secretaria exclusiva (sa = saúde; ed = educação; as = assistência social)
    • pl_ = plano setorial (sa = saúde; ed = educação; as = assistência social)
    • fu_ = fundo setorial (sa = saúde; ed = educação; as = assistência social)
    • chl_ = conselho setorial (sa = saúde; ed = educação; as = assistência social)
    • ser_ = servidores setoriais (sa = saúde; ed = educação; as = assistência social)
    • consor_ = consórcios setoriais (sa = saúde; ed = educação; as = assistência social)
    • pib_total = Pib total do município
    • pib_per_cap = Pib per capta do município
    • ano_pib = Ano de referência do Pib
    • idhm = IDHM do município
    • ano_idhm = Ano de referência do IDHM
capacities_1 %>%
  datatable(extensions = 'Buttons',
            rownames = F,
            options = list(dom = 'Blfrtip',
                           buttons = c('csv', 'excel'),
                          autoFill = TRUE,
                           fixedHeader = TRUE,
                           autowidth = TRUE,
                           paging = F,
                           scrollX = TRUE,
                           scrollY = "400px"))

03. Manipulação

Not run
# Uso particular para configurações de uso pessoal
#setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_2.RData")
#load("capacities_raw_data_2.RData")

Filtrar munincípios

  • Selecionar aqueles com menos de 50.000 habitantes

De 5.565 mun. passamos a trabalhar com 4.917 (88%)

capacities_2 <- capacities_1 %>% 
  filter(populacao <= 50000) %>% 
  mutate(faixa_pop = faixa_pop %>% as.factor())

Verificar aplicação

  • Visualizar:

    • Categorias

    • Quantidades em cada categoria

    • Estatisticas descritivas básicas

unique(capacities_2$faixa_pop)
## [1] 4 - 20001 até 50000 2 - 5001 até 10000  3 - 10001 até 20000
## [4] 1 - Até 5000       
## 4 Levels: 1 - Até 5000 2 - 5001 até 10000 ... 4 - 20001 até 50000
summary(capacities_2$faixa_pop)
##        1 - Até 5000  2 - 5001 até 10000 3 - 10001 até 20000 4 - 20001 até 50000 
##                1242                1214                1381                1080
summary(capacities_2$populacao)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     822    4967   10008   13312   18595   49963

Classificar variáveis

character_col <- c("cod_mun", "nm_mun")

factor_col <- c("cod_est", "nm_est", "sg_est","faixa_pop", "regiao", "sc_sa", "sc_as", "sc_ed", "pl_sa", "pl_as", "pl_ed", "fu_sa", "fu_as", "fu_ed", "chl_sa", "chl_as", "chl_ed", "consor_ed", "consor_ed", "consor_sa", "consor_as") 

numeric_col <- c("populacao", "ser_sa", "ser_as", "ser_ed", "pib_total", "pib_per_cap", "ano_pib", "idhm","ano_idhm")

capacities_2 <- capacities_2 %>% 
  mutate_at(character_col, as.character) %>% 
  mutate_at(factor_col, as.factor) %>% 
  mutate_at(numeric_col, as.numeric)

Sumário das variáveis

  • Numéricas: são apresentados valores mínimos, máximos, média, mediana etc.

  • Categóricas: categorias e quantidade de cada uma

  • Character: quantidade de valores únicos

summary(capacities_2)
##    cod_mun             nm_mun            populacao    
##  Length:4917        Length:4917        Min.   :  822  
##  Class :character   Class :character   1st Qu.: 4967  
##  Mode  :character   Mode  :character   Median :10008  
##                                        Mean   :13312  
##                                        3rd Qu.:18595  
##                                        Max.   :49963  
##                                                       
##                faixa_pop       cod_est                   nm_est    
##  1 - Até 5000       :1242   31     : 785   Minas Gerais     : 785  
##  2 - 5001 até 10000 :1214   35     : 512   São Paulo        : 512  
##  3 - 10001 até 20000:1381   43     : 453   Rio Grande do Sul: 453  
##  4 - 20001 até 50000:1080   29     : 370   Bahia            : 370  
##                             41     : 364   Paraná           : 364  
##                             42     : 265   Santa Catarina   : 265  
##                             (Other):2168   (Other)          :2168  
##      sg_est                  regiao    
##  MG     : 785   1 - Norte       : 379  
##  SP     : 512   2 - Nordeste    :1611  
##  RS     : 453   3 - Sudeste     :1419  
##  BA     : 370   4 - Sul         :1082  
##  PR     : 364   5 - Centro-Oeste: 426  
##  SC     : 265                          
##  (Other):2168                          
##                                                    sc_sa     
##  Não informado                                        :   2  
##  Órgão da administração indireta                      :   4  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas: 366  
##  Secretaria municipal exclusiva                       :4417  
##  Setor subordinado a outra secretaria                 :  10  
##  Setor subordinado diretamente à chefia do Executivo  : 117  
##                                                    sc_as     
##  Fundação pública                                     :   3  
##  Não possui estrutura                                 :   2  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas: 963  
##  Secretaria municipal exclusiva                       :3727  
##  Setor subordinado a outra secretaria                 :  82  
##  Setor subordinado diretamente à chefia do Executivo  : 139  
##                                                    sc_ed     
##  Não informado                                        :   1  
##  Órgão da administração indireta                      :   2  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas:1983  
##  Secretaria municipal exclusiva                       :2751  
##  Setor subordinado à outra secretaria                 :   9  
##  Setor subordinado diretamente à chefia do Executivo  : 170  
##            pl_sa         pl_as                pl_ed                fu_sa     
##  Não          : 122   Não   : 286   Não          :2852   Não          :   4  
##  Não informado:   3   Recusa:   1   Não informado:   3   Não informado:   3  
##  Recusa       :   1   Sim   :4630   Recusa       :   1   Recusa       :   1  
##  Sim          :4791                 Sim          :2061   Sim          :4909  
##                                                                              
##                                                                              
##                                                                              
##     fu_as                fu_ed                chl_sa        chl_as    
##  Não   :  31   Não          :  72   Não          :  10   Não   :   5  
##  Recusa:   1   Não informado:   3   Não informado:   2   Recusa:   1  
##  Sim   :4885   Recusa       :   1   Recusa       :   1   Sim   :4911  
##                Sim          :4841   Sim          :4904                
##                                                                       
##                                                                       
##                                                                       
##            chl_ed         ser_sa           ser_as            ser_ed      
##  Não          : 666   Min.   :   1.0   Min.   :  0.000   Min.   :   0.0  
##  Não informado:   3   1st Qu.:  61.0   1st Qu.:  2.000   1st Qu.:  94.0  
##  Recusa       :   1   Median : 100.0   Median :  5.000   Median : 179.0  
##  Sim          :4247   Mean   : 135.7   Mean   :  8.559   Mean   : 267.4  
##                       3rd Qu.: 179.0   3rd Qu.: 11.000   3rd Qu.: 364.0  
##                       Max.   :1253.0   Max.   :180.000   Max.   :2460.0  
##                       NA's   :50       NA's   :11        NA's   :29      
##          consor_ed            consor_sa            consor_as   
##  Não          :4594   Não          :2396   Não          :4513  
##  Não informado:   1   Não informado:   1   Não informado:   1  
##  Recusa       :   1   Recusa       :   1   Recusa       :   1  
##  Sim          : 321   Sim          :2519   Sim          : 402  
##                                                                
##                                                                
##                                                                
##    pib_total         pib_per_cap        ano_pib          idhm       
##  Min.   :   11715   Min.   :  3082   Min.   :2014   Min.   :0.4180  
##  1st Qu.:   58829   1st Qu.:  7491   1st Qu.:2014   1st Qu.:0.5940  
##  Median :  119973   Median : 12951   Median :2014   Median :0.6570  
##  Mean   :  238100   Mean   : 17625   Mean   :2014   Mean   :0.6521  
##  3rd Qu.:  251339   3rd Qu.: 21434   3rd Qu.:2014   3rd Qu.:0.7100  
##  Max.   :11915834   Max.   :815698   Max.   :2014   Max.   :0.8540  
##                                                                     
##     ano_idhm   
##  Min.   :2010  
##  1st Qu.:2010  
##  Median :2010  
##  Mean   :2010  
##  3rd Qu.:2010  
##  Max.   :2010  
## 

Filtrar casos com “recusa”

  • 1 mun. (cod_mun: 2102150) recusou-se a responder todas as questões

  • 1 mun. (cod_mun: 2102150) recusou-se a responder questões sobre consórcios

  • Outros casos serão excluídos oportunamente

# capacities_2[which(capacities_2$sc_as == "Recusa"), ]
# capacities_2[which(capacities_2$sc_ed == "Recusa"), ]
# capacities_2[which(capacities_2$consor_ed == "Recusa"), ]

# # A tibble: 1 x 31
#   cod_mun nm_mun populacao faixa_pop cod_est nm_est sg_est regiao sc_sa sc_as sc_ed pl_sa pl_as pl_ed
#   <chr>   <chr>      <dbl> <fct>     <fct>   <fct>  <fct>  <fct>  <fct> <fct> <fct> <fct> <fct> <fct>
# 1 2102150 Brejo~      4291 1 - Até ~ 21      Maran~ MA     2 - N~ Recu~ Recu~ Recu~ Recu~ Recu~ Recu~

# Filtrar 1 municipio com recusa para todas as variáveis
capacities_2 <- filter(capacities_2, cod_mun != 2102150) 
capacities_2 <- filter(capacities_2, cod_mun != 4110508) 

# 4.915 casos 

Dummies

  • Transformar variáveis em dummies

Operação em dois passos

  • O primeiro aplicado somente às secretarias
  • O segundo a todas as variáveis com respostas “Sim”

Secretarias

  • Reconferir classficação da saúde, educação e assistência social, respectivamente
# verificar labels
unique(capacities_2$sc_sa)
## [1] Secretaria municipal exclusiva                       
## [2] Setor subordinado diretamente à chefia do Executivo  
## [3] Secretaria municipal em conjunto com outras políticas
## [4] Setor subordinado a outra secretaria                 
## [5] Não informado                                        
## [6] Órgão da administração indireta                      
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_ed)
## [1] Secretaria municipal exclusiva                       
## [2] Secretaria municipal em conjunto com outras políticas
## [3] Setor subordinado diretamente à chefia do Executivo  
## [4] Órgão da administração indireta                      
## [5] Setor subordinado à outra secretaria                 
## [6] Não informado                                        
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_as)
## [1] Secretaria municipal em conjunto com outras políticas
## [2] Secretaria municipal exclusiva                       
## [3] Setor subordinado diretamente à chefia do Executivo  
## [4] Setor subordinado a outra secretaria                 
## [5] Fundação pública                                     
## [6] Não possui estrutura                                 
## 7 Levels: Fundação pública Não possui estrutura ... Setor subordinado diretamente à chefia do Executivo

1º passo

  • Transformar Secretaria municipal exclusiva = Sim

  • Outras modalidades = Não

# Transformar Secretaria exclusiva = Sim.
capacities_2 <- capacities_2 %>%
  mutate_at(vars(sc_sa:sc_ed), 
            funs(ifelse(.=="Secretaria municipal exclusiva", "Sim","Não"))) 

Verificar aplicação

quantidades e porcentagens por setor

capacities_2 %>% 
  count(sc_sa, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>% 
  count(sc_as, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>% 
  count(sc_ed, name = "quantidade") %>%
  mutate(perc = quantidade/sum(quantidade)*100)

2º passo

  • Transformar todas as respostas “Sim” = 1;

  • Todas demais opções (“Não”, “Não informado”, etc) = 0

  • Depois, realizar a contagem de “Sim” e classificar

Secretarias

  • realizar contagem de “Sim” e categorizar

Visualizar classificação da contagem, quantidade e porcentagem em cada categoria (apenas para saúde. O mesmo procedimento foi aplicado às demais áreas)

# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(sc_sa:sc_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
  capacities_2 <- capacities_2 %>% 
    mutate(Num_sc = rowSums(select(.,sc_sa:sc_ed))) %>% 
    relocate(Num_sc, .after = sc_ed)
  
# Categorizar quantidade de secretarias
capacities_2 <- capacities_2 %>% 
  mutate(Sc_class = case_when(
    Num_sc == 3 ~ "Possui 3",
    Num_sc == 2 ~ "Possui 2",
    Num_sc == 1 ~ "Possui 1",
    Num_sc == 0 ~ "Não possui")) %>% 
    relocate(Sc_class, .after = Num_sc)

levels_cat <- c("Não possui" ,"Possui 1", "Possui 2","Possui 3")

capacities_2$Sc_class <- ordered(capacities_2$Sc_class, 
               levels = c(levels_cat))

# Verificar 
capacities_2 %>% 
  count(Sc_class, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)

Planos

  • realizar contagem de “Sim” e categorizar
# # Verificar lables
# unique(capacities_1$pl_as)
# unique(capacities_1$pl_sa)
# unique(capacities_1$pl_ed)

# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
  mutate_at(vars(pl_sa:pl_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_pl = rowSums(select(.,pl_sa:pl_ed)))%>% 
  relocate(Num_pl, .after = pl_ed)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>%
  mutate(Pl_class = case_when(
    Num_pl == 3 ~ "Possui 3",
    Num_pl == 2 ~ "Possui 2",
    Num_pl == 1 ~ "Possui 1",
    Num_pl == 0 ~ "Não possui")) %>% 
    relocate(Pl_class, .after = Num_pl)

capacities_2$Pl_class <- ordered(capacities_2$Pl_class, 
               levels = c(levels_cat))

capacities_2 %>% 
  count(Pl_class, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)

Fundos

  • realizar contagem de “Sim” e categorizar
# # Verificar lables
# unique(capacities_1$fu_as)
# unique(capacities_1$fu_sa)
# unique(capacities_1$fu_ed)

# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(fu_sa:fu_ed), funs(ifelse(.== "Sim", 1, 0))) 

  # Contar quantidade de "sim" e organizar colunas
  capacities_2 <- capacities_2 %>% 
    mutate(Num_fu = rowSums(select(.,fu_sa:fu_ed)))%>% 
    relocate(Num_fu, .after = fu_ed) 
  
# Categorizar quantidade de fundos
capacities_2 <- capacities_2 %>% 
  mutate(Fu_class = case_when(
    Num_fu == 3 ~ "Possui 3",
    Num_fu == 2 ~ "Possui 2",
    Num_fu == 1 ~ "Possui 1",
    Num_fu == 0 ~ "Não possui")) %>% 
    relocate(Fu_class, .after = Num_fu)

capacities_2$Fu_class <- ordered(capacities_2$Fu_class, 
               levels = c(levels_cat))

capacities_2 %>% 
  count(Fu_class, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)

Conselhos

  • realizar contagem de “Sim” e categorizar
# # Verificar lables
# unique(capacities_1$chl_as)
# unique(capacities_1$chl_sa)
# unique(capacities_1$chl_ed)


# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(chl_sa:chl_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_chl = rowSums(select(.,chl_sa:chl_ed)))%>% 
  relocate(Num_chl, .after = chl_ed)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>% 
  mutate(Chl_class = case_when(
    Num_chl == 3 ~ "Possui 3",
    Num_chl == 2 ~ "Possui 2",
    Num_chl == 1 ~ "Possui 1",
    Num_chl == 0 ~ "Não possui")) %>% 
    relocate(Chl_class, .after = Num_chl)

capacities_2$Chl_class <- ordered(capacities_2$Chl_class, 
               levels = c(levels_cat))

capacities_2 %>% 
  count(Chl_class, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)

Consórcios

  • realizar contagem de “Sim” e categorizar
# # Assistência Social
# levels(capacities_2$consor_as)
# levels(capacities_2$consor_ed)
# levels(capacities_2$consor_sa)

capacities_2 <- capacities_2 %>% 
  mutate_at(vars(consor_ed:consor_as), 
            funs(ifelse(.== "Sim", 1, 0)))

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_consor = rowSums(select(.,consor_ed:consor_as)))%>% 
  relocate(Num_consor, .after = consor_as)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>% 
  mutate(Consor_class = case_when(
    Num_consor == 3 ~ "Possui 3",
    Num_consor == 2 ~ "Possui 2",
    Num_consor == 1 ~ "Possui 1",
    Num_consor == 0 ~ "Não possui")) %>% 
    relocate(Consor_class, .after = Num_consor)

capacities_2$Consor_class <- ordered(capacities_2$Consor_class,
               levels = c(levels_cat))

capacities_2 %>% 
  count(Consor_class, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)

Servidores

  • calcular proporção de servidores por 10.000 habitantes
capacities_2 <- capacities_2 %>%
  mutate(ser_sa_pop = ser_sa*10000/populacao,
              ser_ed_pop = ser_ed*10000/populacao,
              ser_as_pop = ser_as*10000/populacao,
              total_ser_por_10mil_hab = ser_sa_pop + ser_ed_pop + ser_as_pop,
              total_ser_por_10mil_hab = round(total_ser_por_10mil_hab)) %>% 
  relocate(ser_sa:ser_ed, .after = Consor_class ) %>% 
  relocate(ser_sa_pop:total_ser_por_10mil_hab, .after = ser_ed)

summary(capacities_2$total_ser_por_10mil_hab)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    29.0   248.0   321.0   339.8   411.0  1323.0      71

IDHM

  • Quintis
  • Mímimo
  • Máximo
#Verificar quantiles 
quantile(capacities_2$idhm, c(.2,.4,.6,.8,1))
##   20%   40%   60%   80%  100% 
## 0.584 0.629 0.681 0.719 0.854
min(capacities_2$idhm)
## [1] 0.418
max(capacities_2$idhm) 
## [1] 0.854
#   20%   40%   60%   80%  100% 
# 0.584 0.629 0.681 0.719 0.854 

Categorizar IDHM

capacities_2 <- capacities_2 %>% 
  mutate(idhm_quintil = case_when(
    idhm <= 0.584 ~ "primeiro",
    idhm >= 0.585 & idhm <= 0.629 ~ "segundo",
    idhm >= 0.630 & idhm <= 0.681 ~ "terceiro",
    idhm >= 0.682 & idhm <= 0.719 ~ "quarto",
    idhm >= 0.720 ~ "quinto"))
    

levels_idhm = c("primeiro", "segundo", "terceiro", "quarto", "quinto")

capacities_2$idhm_quintil <- ordered(capacities_2$idhm_quintil, 
               levels = c(levels_idhm))

Verificar aplicação

Do artigo:

“Para operacionalizar essa variável, devido à necessidade de ajuste ao modelo logístico empregado (Yee, 2010), ao invés de trabalharmos com as gradações oficiais, trabalhamos com os quintis da distribuição observada , ordenados de forma crescente” (p. 10)

“Pela classificação do Atlas Brasil, dentre os 4.916 municípios analisados, apenas 30 se enquadram na classificação “muito baixo” e 5, na “muito alto”. Isso gera alta concentração nas categorias intermediárias (“baixo” = 1.316; “médio”= 2.054 e “alto” = 1.511). Ao adotar a classificação por quintis, aproximadamente 25% dos valores ficam classificadas em cada uma das categoriais, o que representa uma distribuição mais homogênea entre as categorias e permite a melhor aplicação do modelo logístico de regressão." (p. 10, nota 4)

  • Na verdade são ~20% dos valores
capacities_2 %>% 
  count(idhm_quintil, name = "qtdd_de_mun") %>% 
  mutate(perc = qtdd_de_mun/sum(qtdd_de_mun)*100)

Nova base 2

Criada para preservar os dados brutos em caso de reutilização

capacities_3 <- capacities_2

04. Ver dados manipulados

capacities_3 %>%
  datatable(extensions = 'Buttons',
            rownames = F,
            options = list(dom = 'Blfrtip',
                           buttons = c('csv', 'excel'),
                          autoFill = TRUE,
                           fixedHeader = TRUE,
                           autowidth = TRUE,
                           paging = F,
                           scrollX = TRUE,
                           scrollY = "400px"))

Verificar e remover NA’s

  • NA - Not Available (dados não disponíveis)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities_3)

# NA - presentes apenas na quantidade de servidores
# 1,46% dos casos está com NA. Excluindo esses, o número de municípios decai para 4.844 (86% do total)

capacities_3 <- capacities_3 %>% 
  drop_na(total_ser_por_10mil_hab)

DataExplorer::plot_missing(capacities_3)

Not run
# Uso particular para configurações
# setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_3.RData")
#load("capacities_raw_data_3.RData")

05. Regressões

capacities_4 <- capacities_3
  • Rodadas com a função vglm, do pacote ‘VGAM’, e os argumentos family = cumulative(parallel = T, reverse = T)

No artigo foram reportadas apenas a coluna Estimate e o p-value

Brasil

  • 4.844 casos
olr_brasil <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = capacities_4, family = cumulative(parallel = T, reverse = T))

summary(olr_brasil)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = capacities_4)
## 
## Pearson residuals:
##                        Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2])  -44.96  0.03144  0.09835  0.27810  3.751
## logitlink(P[Y>=3])  -28.26 -0.30005  0.10343  0.29819 35.771
## logitlink(P[Y>=4]) -262.13 -0.26640 -0.10316  0.37688  6.405
## logitlink(P[Y>=5])  -33.97 -0.32335 -0.08986 -0.03877  9.709
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -2.704e+01  8.095e-01 -33.400  < 2e-16 ***
## (Intercept):2           -2.876e+01  8.205e-01 -35.049  < 2e-16 ***
## (Intercept):3           -3.041e+01  8.341e-01 -36.463  < 2e-16 ***
## (Intercept):4           -3.209e+01  8.467e-01 -37.907  < 2e-16 ***
## log(pib_per_cap)         2.974e+00  6.172e-02  48.191  < 2e-16 ***
## Num_sc                  -2.092e-01  3.440e-02  -6.081 1.19e-09 ***
## Num_pl                   2.832e-01  4.953e-02   5.717 1.09e-08 ***
## Num_fu                   2.458e-01  1.793e-01   1.371     0.17    
## Num_chl                  5.062e-01  8.061e-02   6.280 3.39e-10 ***
## total_ser_por_10mil_hab -3.405e-03  2.197e-04 -15.499  < 2e-16 ***
## Num_consor               1.959e-01  3.711e-02   5.279 1.30e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 11511.06 on 19365 degrees of freedom
## 
## Log-likelihood: -5755.53 on 19365 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              19.5761472               0.8112396               1.3273146 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               1.2786780               1.6589690               0.9966012 
##              Num_consor 
##               1.2164123

Norte

  • 368 casos
norte <- capacities_4 %>% 
  filter(regiao == "1 - Norte")

olr_norte <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = norte, family = cumulative(parallel = T, reverse = T))

summary(olr_norte)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = norte)
## 
## Pearson residuals:
##                        Min      1Q   Median       3Q   Max
## logitlink(P[Y>=2])  -9.961 -0.6551  0.23297  0.63426 2.579
## logitlink(P[Y>=3]) -10.095 -0.6047 -0.20622  0.65998 2.880
## logitlink(P[Y>=4])  -2.993 -0.2538 -0.11247 -0.06369 9.108
## logitlink(P[Y>=5])  -0.935 -0.0651 -0.04221 -0.02455 6.024
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -2.514e+01  2.745e+00  -9.156  < 2e-16 ***
## (Intercept):2           -2.689e+01  2.787e+00  -9.646  < 2e-16 ***
## (Intercept):3           -2.971e+01  2.878e+00 -10.324  < 2e-16 ***
## (Intercept):4           -3.176e+01  2.990e+00 -10.622  < 2e-16 ***
## log(pib_per_cap)         2.834e+00  2.695e-01  10.517  < 2e-16 ***
## Num_sc                  -1.626e-01  1.496e-01  -1.087  0.27711    
## Num_pl                   1.515e-01  1.867e-01   0.812  0.41699    
## Num_fu                   8.331e-03  4.379e-01   0.019  0.98482    
## Num_chl                  1.924e-01  2.239e-01   0.859  0.39027    
## total_ser_por_10mil_hab -1.937e-03  7.325e-04  -2.644  0.00818 ** 
## Num_consor              -1.749e-01  1.564e-01  -1.118  0.26346    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 780.7116 on 1461 degrees of freedom
## 
## Log-likelihood: -390.3558 on 1461 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## No Hauck-Donner effect found in any of the estimates
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              17.0114864               0.8499459               1.1636012 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               1.0083654               1.2121167               0.9980649 
##              Num_consor 
##               0.8395527

Nordeste

  • 1.574 casos
nordeste <- capacities_4 %>% 
  filter(regiao == "2 - Nordeste")

olr_nordeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = nordeste, family = cumulative(parallel = T, reverse = T))

summary(olr_nordeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = nordeste)
## 
## Pearson residuals:
##                        Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -9.8483 -0.86411 -0.18002  0.96766  2.173
## logitlink(P[Y>=3]) -2.9322 -0.36921 -0.19560 -0.14750  9.575
## logitlink(P[Y>=4]) -0.4855 -0.05911 -0.04669 -0.03788 14.595
## logitlink(P[Y>=5]) -1.2406 -0.01845 -0.01480 -0.01201 10.005
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.557e+01  1.560e+00  -9.980  < 2e-16 ***
## (Intercept):2           -1.815e+01  1.583e+00 -11.465  < 2e-16 ***
## (Intercept):3           -2.116e+01  1.640e+00 -12.901  < 2e-16 ***
## (Intercept):4           -2.338e+01  1.871e+00 -12.495  < 2e-16 ***
## log(pib_per_cap)         1.708e+00  1.304e-01  13.092  < 2e-16 ***
## Num_sc                  -1.266e-01  7.277e-02  -1.740 0.081826 .  
## Num_pl                   3.479e-01  9.273e-02   3.751 0.000176 ***
## Num_fu                  -3.931e-01  3.164e-01  -1.242 0.214074    
## Num_chl                  5.383e-01  1.590e-01   3.385 0.000713 ***
## total_ser_por_10mil_hab -1.290e-03  3.989e-04  -3.233 0.001223 ** 
## Num_consor               9.467e-02  6.551e-02   1.445 0.148415    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 2776.816 on 6285 degrees of freedom
## 
## Log-likelihood: -1388.408 on 6285 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):4'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##               5.5160519               0.8810550               1.4160229 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.6749444               1.7130142               0.9987109 
##              Num_consor 
##               1.0992983

Centro-Oeste

  • 418 casos
centro_oeste <- capacities_4 %>% 
  filter(regiao == "5 - Centro-Oeste")

olr_centro_oeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = nordeste, family = cumulative(parallel = T, reverse = T))

summary(olr_centro_oeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = nordeste)
## 
## Pearson residuals:
##                        Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -9.8483 -0.86411 -0.18002  0.96766  2.173
## logitlink(P[Y>=3]) -2.9322 -0.36921 -0.19560 -0.14750  9.575
## logitlink(P[Y>=4]) -0.4855 -0.05911 -0.04669 -0.03788 14.595
## logitlink(P[Y>=5]) -1.2406 -0.01845 -0.01480 -0.01201 10.005
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.557e+01  1.560e+00  -9.980  < 2e-16 ***
## (Intercept):2           -1.815e+01  1.583e+00 -11.465  < 2e-16 ***
## (Intercept):3           -2.116e+01  1.640e+00 -12.901  < 2e-16 ***
## (Intercept):4           -2.338e+01  1.871e+00 -12.495  < 2e-16 ***
## log(pib_per_cap)         1.708e+00  1.304e-01  13.092  < 2e-16 ***
## Num_sc                  -1.266e-01  7.277e-02  -1.740 0.081826 .  
## Num_pl                   3.479e-01  9.273e-02   3.751 0.000176 ***
## Num_fu                  -3.931e-01  3.164e-01  -1.242 0.214074    
## Num_chl                  5.383e-01  1.590e-01   3.385 0.000713 ***
## total_ser_por_10mil_hab -1.290e-03  3.989e-04  -3.233 0.001223 ** 
## Num_consor               9.467e-02  6.551e-02   1.445 0.148415    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 2776.816 on 6285 degrees of freedom
## 
## Log-likelihood: -1388.408 on 6285 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):4'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##               5.5160519               0.8810550               1.4160229 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.6749444               1.7130142               0.9987109 
##              Num_consor 
##               1.0992983

Sudeste

  • 1.407 casos
sudeste <- capacities_4 %>% 
  filter(regiao == "3 - Sudeste")

olr_sudeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = sudeste, family = cumulative(parallel = T, reverse = T))

summary(olr_sudeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = sudeste)
## 
## Pearson residuals:
##                         Min       1Q   Median     3Q    Max
## logitlink(P[Y>=2])   -9.515  0.04022  0.06855 0.1308  1.696
## logitlink(P[Y>=3])  -15.354  0.07184  0.13510 0.4036 11.774
## logitlink(P[Y>=4]) -133.081 -0.56684  0.19885 0.5737  4.277
## logitlink(P[Y>=5])  -17.497 -0.61263 -0.17243 0.5507  5.880
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -2.267e+01  1.755e+00 -12.919  < 2e-16 ***
## (Intercept):2           -2.460e+01  1.761e+00 -13.970  < 2e-16 ***
## (Intercept):3           -2.675e+01  1.783e+00 -15.003  < 2e-16 ***
## (Intercept):4           -2.843e+01  1.801e+00 -15.785  < 2e-16 ***
## log(pib_per_cap)         2.499e+00  1.253e-01  19.939  < 2e-16 ***
## Num_sc                  -1.430e-01  6.515e-02  -2.195   0.0282 *  
## Num_pl                  -1.843e-02  9.188e-02  -0.201   0.8410    
## Num_fu                   7.453e-01  4.334e-01   1.720   0.0855 .  
## Num_chl                  9.300e-01  1.725e-01   5.391 7.01e-08 ***
## total_ser_por_10mil_hab -2.848e-03  4.087e-04  -6.970 3.18e-12 ***
## Num_consor              -6.012e-01  8.853e-02  -6.791 1.11e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 3241.068 on 5617 degrees of freedom
## 
## Log-likelihood: -1620.534 on 5617 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              12.1692336               0.8667684               0.9817370 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               2.1070697               2.5344048               0.9971559 
##              Num_consor 
##               0.5481392

Sul

  • 1.077 casos
sul <- capacities_4 %>% 
  filter(regiao == "4 - Sul")

olr_sul <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = sul, family = cumulative(parallel = T, reverse = T))

summary(olr_sul)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = sul)
## 
## Pearson residuals:
##                        Min       1Q  Median      3Q    Max
## logitlink(P[Y>=2])  -9.781  0.01925  0.0280 0.04021 0.5752
## logitlink(P[Y>=3]) -12.105  0.07094  0.1081 0.17196 0.6690
## logitlink(P[Y>=4])  -8.852  0.11025  0.2481 0.61997 1.6437
## logitlink(P[Y>=5])  -5.944 -0.77174 -0.2736 0.80642 3.5892
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.707e+01  2.420e+00  -7.052 1.77e-12 ***
## (Intercept):2           -1.995e+01  2.322e+00  -8.593  < 2e-16 ***
## (Intercept):3           -2.236e+01  2.328e+00  -9.602  < 2e-16 ***
## (Intercept):4           -2.420e+01  2.346e+00 -10.315  < 2e-16 ***
## log(pib_per_cap)         2.429e+00  1.801e-01  13.487  < 2e-16 ***
## Num_sc                  -3.082e-01  6.535e-02  -4.715 2.41e-06 ***
## Num_pl                   9.667e-02  1.106e-01   0.874  0.38230    
## Num_fu                  -1.712e-01  4.779e-01  -0.358  0.72018    
## Num_chl                  1.966e-01  2.023e-01   0.971  0.33132    
## total_ser_por_10mil_hab -1.958e-03  5.991e-04  -3.268  0.00108 ** 
## Num_consor               1.426e-01  8.569e-02   1.664  0.09609 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 2243.33 on 4297 degrees of freedom
## 
## Log-likelihood: -1121.665 on 4297 degrees of freedom
## 
## Number of Fisher scoring iterations: 5 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              11.3516592               0.7348012               1.1014948 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.8426569               1.2172126               0.9980441 
##              Num_consor 
##               1.1532651

06. Mapas

Carregar shapes e tema

shape_mun <- geobr::read_municipality(simplified = T, showProgress = F)
shape_estado <- geobr::read_state(simplified = T, showProgress = F)
Not run
# Uso particular para configurações
#setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_4.RData")
#load("capacities_raw_data_4.RData")
# rm(list = setdiff(ls(), "map"))
#save.image("capacities_raw_data_shapes.RData")
#load("capacities_raw_data_shapes.RData")
map <- shape_mun %>% 
  select(cod_mun = code_muni, geom) %>% 
  mutate(cod_mun = as.character(cod_mun)) %>% 
  left_join(capacities_4)

Config. para mapa

#save(map, "map.RData")
theme_map_manual <- function(){
        theme(legend.position = c(0.35, 0.5), 
        legend.justification = c("right", "top"),
        legend.background = element_blank(),
        plot.title=element_text( hjust=0, vjust=-5, face='bold', size = 12))
}        

levels_map <- levels(map$Sc_class)
# inverter ordem e incluir NA
levels_map <- c(levels_map[c(4:1)], NA)

# Definir cores
colors_map <- c(scales::viridis_pal(option = "D")(4), "gray40")

# Definir cor para cada level
names(colors_map) <- levels_map

# Definir rótulos 
labels_map <- levels_map
labels_map[5] <- "Não analisados\nAcima de 50.000hab."

Secretarias

map_sc <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Sc_class)), 
          color = NA)+
  scale_fill_manual(name = "Secretarias", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Secretarias exclusivas")

Planos

map_pl <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Pl_class)), color = NA)+
  scale_fill_manual(name = "Planos", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Planos")

Fundos

map_fu <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Fu_class)), color = NA)+
  scale_fill_manual(name = "Fundos", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Fundos")

Conselhos

map_chl <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Chl_class)), 
          color = NA)+
  scale_fill_manual(name = "Conselhos", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Conselhos")

Visualizar mapas

mapas <- gridExtra::grid.arrange(map_sc, map_pl, map_fu, map_chl, ncol = 2)

mapas
## TableGrob (2 x 2) "arrange": 4 grobs
##   z     cells    name           grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (1-1,2-2) arrange gtable[layout]
## 3 3 (2-2,1-1) arrange gtable[layout]
## 4 4 (2-2,2-2) arrange gtable[layout]

07. Tabelas auxiliares

Não reportadas no artigo

Matriz de correlação

cap_cor <- capacities_4 %>% 
  select(pib_per_cap, idhm, starts_with("Num"), total_ser_por_10mil_hab, populacao)

corr <- round(cor(cap_cor), 2)

ggcorrplot(corr, hc.order = F, 
           type = "lower", 
           show.diag = T,
           pch = 12,
           pch.cex = 12,
           tl.cex = 12,
           lab = TRUE, 
           lab_size = 3, 
           method="circle", 
           colors = c("tomato2", "white", "springgreen3"), 
           title="Correlação entre variáveis numéricas", 
           ggtheme=theme_bw)

IDHM por região

sjPlot::sjt.xtab(capacities_4$idhm_quintil, 
                 capacities_4$regiao, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
                 title = "IDHM por região")
IDHM por região
idhm_quintil regiao Total
1 - Norte 2 - Nordeste 3 - Sudeste 4 - Sul 5 - Centro-Oeste
primeiro 128
13.3 %
34.8 %
787
81.7 %
50 %
43
4.5 %
3.1 %
2
0.2 %
0.2 %
3
0.3 %
0.7 %
963
100 %
19.9 %
segundo 113
11.8 %
30.7 %
645
67.2 %
41 %
149
15.5 %
10.6 %
31
3.2 %
2.9 %
22
2.3 %
5.3 %
960
100 %
19.8 %
terceiro 108
11.1 %
29.3 %
133
13.7 %
8.4 %
385
39.5 %
27.4 %
210
21.6 %
19.5 %
138
14.2 %
33 %
974
100 %
20.1 %
quarto 16
1.6 %
4.3 %
8
0.8 %
0.5 %
385
39.3 %
27.4 %
376
38.4 %
34.9 %
194
19.8 %
46.4 %
979
100 %
20.2 %
quinto 3
0.3 %
0.8 %
1
0.1 %
0.1 %
445
46 %
31.6 %
458
47.3 %
42.5 %
61
6.3 %
14.6 %
968
100 %
20 %
Total 368
7.6 %
100 %
1574
32.5 %
100 %
1407
29 %
100 %
1077
22.2 %
100 %
418
8.6 %
100 %
4844
100 %
100 %

IDHM por tamanho população

sjPlot::sjt.xtab(capacities_4$idhm_quintil, 
                 capacities_4$faixa_pop, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
                 title = "IDHM por tamanho população")
IDHM por tamanho população
idhm_quintil faixa_pop Total
1 - Até 5000 2 - 5001 até 10000 3 - 10001 até 20000 4 - 20001 até 50000
primeiro 141
14.6 %
11.5 %
248
25.8 %
20.7 %
353
36.7 %
26 %
221
22.9 %
20.9 %
963
100 %
19.9 %
segundo 168
17.5 %
13.7 %
232
24.2 %
19.3 %
330
34.4 %
24.3 %
230
24 %
21.8 %
960
100 %
19.8 %
terceiro 318
32.6 %
25.9 %
277
28.4 %
23.1 %
212
21.8 %
15.6 %
167
17.1 %
15.8 %
974
100 %
20.1 %
quarto 310
31.7 %
25.2 %
249
25.4 %
20.8 %
255
26 %
18.8 %
165
16.9 %
15.6 %
979
100 %
20.2 %
quinto 293
30.3 %
23.8 %
193
19.9 %
16.1 %
208
21.5 %
15.3 %
274
28.3 %
25.9 %
968
100 %
20 %
Total 1230
25.4 %
100 %
1199
24.8 %
100 %
1358
28 %
100 %
1057
21.8 %
100 %
4844
100 %
100 %

Secretarias Brasil

sjPlot::sjt.xtab(capacities_4$idhm_quintil, 
                 capacities_4$Sc_class, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T)
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 8
0.8 %
3.6 %
75
7.8 %
12.8 %
363
37.7 %
18.5 %
517
53.7 %
25 %
963
100 %
19.9 %
segundo 14
1.5 %
6.3 %
109
11.4 %
18.6 %
381
39.7 %
19.4 %
456
47.5 %
22.1 %
960
100 %
19.8 %
terceiro 31
3.2 %
14 %
106
10.9 %
18.1 %
426
43.7 %
21.7 %
411
42.2 %
19.9 %
974
100 %
20.1 %
quarto 61
6.2 %
27.5 %
129
13.2 %
22 %
418
42.7 %
21.3 %
371
37.9 %
17.9 %
979
100 %
20.2 %
quinto 108
11.2 %
48.6 %
168
17.4 %
28.6 %
379
39.2 %
19.3 %
313
32.3 %
15.1 %
968
100 %
20 %
Total 222
4.6 %
100 %
587
12.1 %
100 %
1967
40.6 %
100 %
2068
42.7 %
100 %
4844
100 %
100 %

Secretarias Norte

  sjt.xtab(norte$idhm_quintil, 
                 norte$Sc_class, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Norte")
Norte
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 1
0.8 %
100 %
8
6.2 %
20 %
34
26.6 %
25 %
85
66.4 %
44.5 %
128
100 %
34.8 %
segundo 0
0 %
0 %
24
21.2 %
60 %
37
32.7 %
27.2 %
52
46 %
27.2 %
113
100 %
30.7 %
terceiro 0
0 %
0 %
7
6.5 %
17.5 %
57
52.8 %
41.9 %
44
40.7 %
23 %
108
100 %
29.3 %
quarto 0
0 %
0 %
1
6.2 %
2.5 %
5
31.2 %
3.7 %
10
62.5 %
5.2 %
16
100 %
4.3 %
quinto 0
0 %
0 %
0
0 %
0 %
3
100 %
2.2 %
0
0 %
0 %
3
100 %
0.8 %
Total 1
0.3 %
100 %
40
10.9 %
100 %
136
37 %
100 %
191
51.9 %
100 %
368
100 %
100 %

Secretarias Nordeste

  sjt.xtab(nordeste$idhm_quintil, 
                 nordeste$Sc_class, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Nordeste")
Nordeste
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 6
0.8 %
46.2 %
61
7.8 %
41.5 %
317
40.3 %
49.5 %
403
51.2 %
52.1 %
787
100 %
50 %
segundo 6
0.9 %
46.2 %
69
10.7 %
46.9 %
271
42 %
42.3 %
299
46.4 %
38.6 %
645
100 %
41 %
terceiro 0
0 %
0 %
16
12 %
10.9 %
49
36.8 %
7.7 %
68
51.1 %
8.8 %
133
100 %
8.4 %
quarto 0
0 %
0 %
1
12.5 %
0.7 %
3
37.5 %
0.5 %
4
50 %
0.5 %
8
100 %
0.5 %
quinto 1
100 %
7.7 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
1
100 %
0.1 %
Total 13
0.8 %
100 %
147
9.3 %
100 %
640
40.7 %
100 %
774
49.2 %
100 %
1574
100 %
100 %

Secretarias Centro-Oeste

  sjt.xtab(centro_oeste$idhm_quintil, 
                 centro_oeste$Sc_class,
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Centro-Oeste")
Centro-Oeste
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
2
66.7 %
5.7 %
0
0 %
0 %
1
33.3 %
0.5 %
3
100 %
0.7 %
segundo 0
0 %
0 %
0
0 %
0 %
13
59.1 %
6.7 %
9
40.9 %
4.8 %
22
100 %
5.3 %
terceiro 2
1.4 %
100 %
11
8 %
31.4 %
59
42.8 %
30.3 %
66
47.8 %
35.5 %
138
100 %
33 %
quarto 0
0 %
0 %
18
9.3 %
51.4 %
94
48.5 %
48.2 %
82
42.3 %
44.1 %
194
100 %
46.4 %
quinto 0
0 %
0 %
4
6.6 %
11.4 %
29
47.5 %
14.9 %
28
45.9 %
15.1 %
61
100 %
14.6 %
Total 2
0.5 %
100 %
35
8.4 %
100 %
195
46.7 %
100 %
186
44.5 %
100 %
418
100 %
100 %

Secretarias Sudeste

  sjt.xtab(sudeste$idhm_quintil, 
                 sudeste$Sc_class, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Sudeste")
Sudeste
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 1
2.3 %
2.1 %
4
9.3 %
2.8 %
11
25.6 %
2.2 %
27
62.8 %
3.8 %
43
100 %
3.1 %
segundo 2
1.3 %
4.3 %
14
9.4 %
9.9 %
43
28.9 %
8.4 %
90
60.4 %
12.7 %
149
100 %
10.6 %
terceiro 11
2.9 %
23.4 %
40
10.4 %
28.2 %
147
38.2 %
28.8 %
187
48.6 %
26.4 %
385
100 %
27.4 %
quarto 18
4.7 %
38.3 %
37
9.6 %
26.1 %
139
36.1 %
27.3 %
191
49.6 %
27 %
385
100 %
27.4 %
quinto 15
3.4 %
31.9 %
47
10.6 %
33.1 %
170
38.2 %
33.3 %
213
47.9 %
30.1 %
445
100 %
31.6 %
Total 47
3.3 %
100 %
142
10.1 %
100 %
510
36.2 %
100 %
708
50.3 %
100 %
1407
100 %
100 %

Secretarias Sul

  sjt.xtab(sul$idhm_quintil, 
                 sul$Sc_class, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
                  title = "Sul")
Sul
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
1
50 %
0.2 %
1
50 %
0.5 %
2
100 %
0.2 %
segundo 6
19.4 %
3.8 %
2
6.5 %
0.9 %
17
54.8 %
3.5 %
6
19.4 %
2.9 %
31
100 %
2.9 %
terceiro 18
8.6 %
11.3 %
32
15.2 %
14.3 %
114
54.3 %
23.5 %
46
21.9 %
22 %
210
100 %
19.5 %
quarto 43
11.4 %
27 %
72
19.1 %
32.3 %
177
47.1 %
36.4 %
84
22.3 %
40.2 %
376
100 %
34.9 %
quinto 92
20.1 %
57.9 %
117
25.5 %
52.5 %
177
38.6 %
36.4 %
72
15.7 %
34.4 %
458
100 %
42.5 %
Total 159
14.8 %
100 %
223
20.7 %
100 %
486
45.1 %
100 %
209
19.4 %
100 %
1077
100 %
100 %

Demais tabelas…